# ========= 导入基础模块 ============
from resources_base.module_base.importbase import *
# ========= 导入数据的类 ============
from userweb.models import Permission, Menu


def index(request):
    """展示菜单"""
    return render(request, 'user/permission.html')


def list_values(request):
    """获取所有权限的数据 --- 以树形结构的要求准备数据 """
    # 获取所有菜单
    menu_objs = list(Menu.objects.all().values().order_by('order'))
    # 获取所有权限的条目
    permission_objs = list(Permission.objects.all().values().order_by('order'))
    # ======= 组合成树状结构 ============
    data = []
    # 遍历menu_objs
    for item in menu_objs:
        # 定义一个临时的字典集合
        temp_dict = {}
        # 添加
        temp_dict['title'] = item.get('title')
        temp_dict['id'] = item.get('id')
        temp_dict['order'] = item.get('order')
        temp_dict['spread'] = True
        temp_dict['children'] = []
        # 添加子节点--权限明细
        for val in permission_objs:
            # 判断是否是当前菜单下
            if val['menu_id'] == item['id']:
                temp_dict['children'].append(
                    {'title': val.get('title'), 'id': val.get('order')})

        data.append(temp_dict)

    # 对data按照order排序
    # sorted_data = sorted(data, key=lambda keys: keys.get('order'), reverse=False)  # 从小到大

    # 返回
    return JsonResponse({'data': data})


def get_permission_by_id(request):
    """根据Id获取权限信息"""
    # 获取权限的对象
    permission_id = request.POST.get('permission_id')
    # 获取对象
    # filter --> [{}]集合
    permission_obj = list(Permission.objects.filter(order=permission_id).values())[0]
    # 返回
    return JsonResponse({'data': permission_obj})


def add_value(request):
    """添加权限条目"""
    # 获取传递过来的数据
    rec = request.POST
    # 判断标题、url、排序的编号是否唯一
    is_exists = Permission.objects.filter(
        Q(title=rec.get('title')) | Q(url=rec.get('url')) | Q(order=rec.get('order'))).exists()
    # 如果存在
    if is_exists:
        return JsonResponse({'status': False, 'error': "标题、url或者order的值已存在！"})
    # 创建
    try:
        Permission.objects.create(title=rec.get('title'), url=rec.get('url'),
                                  menu_id=rec.get('menu_id'), order=rec.get('order'))
        # 返回
        return JsonResponse({'status': True})
    except Exception as e:
        return JsonResponse({'status': False, 'error': "新建权限条目出现未知的异常！具体原因：" + str(e)})


def edit_value(request):
    """修改权限条目"""
    # 获取传递过来的数据
    rec = request.POST

    # 判断标题、url、排序的编号是否唯一
    is_exists = Permission.objects.filter(
        Q(title=rec.get('title')) | Q(url=rec.get('url')) |
        Q(order=rec.get('order'))).exclude(id=rec.get('id')).exists()
    # 如果存在
    if is_exists:
        return JsonResponse({'status': False, 'error': "标题、url或者order的值已存在！"})

    # 修改
    try:
        # 获取当前要修改的对象
        permission_obj = Permission.objects.filter(id=rec.get('id')).first()
        permission_obj.title = rec.get('title')
        permission_obj.order = rec.get('order')
        permission_obj.url = rec.get('url')
        permission_obj.menu_id = rec.get('menu_id')
        permission_obj.save()
        # 返回
        return JsonResponse({'status': True})
    except Exception as e:
        return JsonResponse({'status': False, 'error': "修改权限条目出现未知的异常！具体原因：" + str(e)})


def del_value(request):
    """删除权限条目"""
    # 获取要删除的id
    permission_id = request.POST.get('id')
    # 删除
    try:

        # 获取当前要修改的对象
        Permission.objects.filter(id=permission_id).delete()
        # 返回
        return JsonResponse({'status': True})
    except Exception as e:
        return JsonResponse({'status': False, 'error': "删除权限条目出现未知的异常！具体原因：" + str(e)})